/*
 * Título: gestHora. Aplicación web de gestión de horarios para conservatorios.
 * Alumnos:
 * - Javier Pardo Muñoz. I.T. Informática de Gestión
 * - Antonio Prior Cazorla. I.T. Informática de Gestión
 * Director: Dr. José Raúl Romero Salguero.
 *     
 *  Copyright (C) 2013 Javier Pardo Muñoz / Antonio Prior Cazorla
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.

 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package es.uco.gesthora.business.planificador;

import es.uco.gesthora.business.GenerarHorarios;
import es.uco.gesthora.business.algoritmo.Arbol;
import es.uco.gesthora.business.gestorRutas.GestorRutas;
import es.uco.gesthora.data.gestorPropiedades.GestorPropiedades;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Crea el hilo de fondo que será el encargado de iniciar el algoritmo de
 * generación de horarios
 *
 * @author Javier Pardo Muñoz / Antonio Prior Cazorla
 */
public class Hilo extends Thread {

    private boolean corriendo = true;

    public void setCorriendo(boolean corriendo) {
        this.corriendo = corriendo;
    }

    public void run() {

        String path = GestorRutas.getInstance().getWebInfPath();
        String fechaInicioAlgoritmo = null;
        String algoritmoLanzado = null;


        while (corriendo) {

            GestorPropiedades fechas = new GestorPropiedades(path, "DatosAplicacion.properties");

            //Si el algoritmo ya ha sido lanzado no se volverá a lanzar
            algoritmoLanzado = fechas.getPropiedad("algoritmoLanzado");

            if (algoritmoLanzado.equals("false")) {

                //Se obtiene la fecha de inicio del algoritmo (fecha de fin de solicitudes) del properties
                fechaInicioAlgoritmo = fechas.getPropiedad("finSolicitudes");

                //Se le da formato a la fecha del properties y se obtiene la fecha actual
                SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm");
                Date fechaInicio = sdf.parse(fechaInicioAlgoritmo, new ParsePosition(0));
                Date fechaActual = new Date();

                //Si la fecha actual es posterior a la fecha de inicio del algoritmo arranca
                if (fechaActual.after(fechaInicio)) {

                    //Indicamos en el properties que el algoritmo ya se lanzo
                    fechas.modPropiedad("algoritmoLanzado", "true");
                    fechas.guardarProperties(path, "DatosAplicacion.properties", "Fichero de configuración de la aplicación");

                    //Se llama al algoritmo
                    GenerarHorarios generarHorarios = GenerarHorarios.getInstance();
                    try {
                        generarHorarios.iniciarAlgoritmo();
                    } catch (InterruptedException ex) {
                        Logger.getLogger(Hilo.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    //System.out.println("Arranca el algoritmo");                

                }
            }

            //Comprobamos esto cada 5 minutos
            try {
                Thread.sleep(300000);
            } catch (InterruptedException ex) {
                Logger.getLogger(Hilo.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}
